17.2 初始化

初始化过程非常简单,重点是设置gcpercent和next_gc阈值。

mgc.go

func gcinit() { // 并发执行器 work.markfor=parforalloc(_MaxGcproc)

// 设置GOGC _ =setGCPercent(readgogc())

// 初始启动阈值(4MB) memstats.next_gc=heapminimum }

func readgogc()int32{ p:=gogetenv(“GOGC”) if p "" { return 100 } if p “off” { return-1 } return int32(atoi(p)) }

func setGCPercent(in int32) (out int32) { out=gcpercent if in<0{ in= -1 } gcpercent=in heapminimum=defaultHeapMinimum*uint64(gcpercent) /100 return out }